package com.elcl.util.viewutils;

import android.app.Activity;
import android.view.View;
import android.view.View.MeasureSpec;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.elcl.storage.ApplicationCache;
import com.elcl.util.StringUtils;

public class ViewUtils {

    /**
     * 获取View的宽度，如果是在View没渲染完之前测量，结果是空，这时只能先measure之后再获取结
     *
     * @param view
     * @return
     */
    public static int getViewWidth(View view) {
        getViewMeasure(view);
        return view.getMeasuredWidth();
    }

    public static int getViewHeight(View view) {
        getViewMeasure(view);
        return view.getMeasuredHeight();
    }

    private static void getViewMeasure(View view) {
        int widthSpec = View.MeasureSpec.makeMeasureSpec(0,
                MeasureSpec.UNSPECIFIED);
        int heightSpec = View.MeasureSpec.makeMeasureSpec(
                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        view.measure(widthSpec, heightSpec);
    }

    /**
     * 将View中的内容读出来
     *
     * @param view
     * @return 返回View中的字符串
     */
    public static String getStringOfView(View view) {
        String result = "";
        if (view instanceof EditText) {
            result = ((EditText) view).getText().toString().trim();
        } else if (view instanceof TextView) {
            result = ((TextView) view).getText().toString().trim();
        }
        return result;
    }

    /**
     * 将View中的内容读出来
     *
     * @return 返回View中的字符串
     */
    public static String getStringOfView(Activity act, int viewId) {
        View view = act.findViewById(viewId);
        String result = getStringOfView(view);
        return result;
    }

    /**
     * 将View中的内容读出来放在数组中
     *
     * @return 返回View中的字符串
     */
    public static String[] getStringOfView(View... view) {
        String[] result = new String[view.length];
        for (int i = 0; i < view.length; i++) {
            if (view[i] instanceof EditText) {
                result[i] = ((EditText) view[i]).getText().toString().trim();
            } else if (view[i] instanceof TextView) {
                result[i] = ((TextView) view[i]).getText().toString().trim();
            }
        }
        return result;
    }

    /**
     * 将View中的内容读出来放在数组中
     *
     * @return 返回View中的字符串
     */
    public static String[] getStringOfView(Activity act, int... viewId) {
        String[] result = new String[viewId.length];
        for (int i = 0; i < viewId.length; i++) {
            View view = act.findViewById(viewId[i]);
            if (view instanceof EditText) {
                result[i] = ((EditText) view).getText().toString().trim();
            } else if (view instanceof TextView) {
                result[i] = ((TextView) view).getText().toString().trim();
            }
        }
        return result;
    }

    /**
     * 判断输入的EditText是否为空，为空的话返回null值，不为空的话返回view中的字符串
     * <p/>
     * 输入的editText的控件
     *
     * @param prompts 为空的时候显示的相应的提示信息并返回null
     */
    public static String[] isEdtNull(String[] prompts, TextView... edt_content) {
        String[] contents = getStringOfView(edt_content);
        for (int i = 0, len = edt_content.length; i < len; i++) {
            if (StringUtils.isBlank(contents[i])) {
                Toast.makeText(ApplicationCache.context, prompts[i],
                        Toast.LENGTH_SHORT).show();
                return null;
            }
        }
        return contents;
    }

    /**
     * 判断输入的EditText是否为空，为空的话返回null值，不为空的话返回view中的字符串
     * <p/>
     * 输入的editText的控件
     *
     * @param prompts 为空的时候显示的相应的提示信息并返回null
     */
    public static String[] isEdtNull(Activity act, String[] prompts,
                                     int... edtId) {
        String[] contents = new String[edtId.length];
        for (int i = 0, len = edtId.length; i < len; i++) {
            View view = act.findViewById(edtId[i]);
            if (view instanceof EditText) {
                contents[i] = ((EditText) view).getText().toString().trim();
            } else if (view instanceof TextView) {
                contents[i] = ((TextView) view).getText().toString().trim();
            }
            if (StringUtils.isBlank(contents[i])) {
                Toast.makeText(ApplicationCache.context, prompts[i],
                        Toast.LENGTH_SHORT).show();
                return null;
            }
        }
        return contents;
    }

    /**
     * 判断输入的EditText是否为空，为空的话返回null值，不为空的话返回view中的字符串
     * <p/>
     * 输入的editText的控件
     * 为空的时候显示的相应的提示信息并返回null
     */
    public static Object[] getEdtNull(TextView... edt_content) {
        Object[] contents = getStringOfView(edt_content);
        for (int i = 0, len = edt_content.length; i < len; i++) {
            if (StringUtils.isBlank((String) contents[i])) {
                contents[0] = edt_content[i];
                return contents;
            }
        }
        return contents;
    }

    /**
     * 判断输入的EditText是否为空，为空的话返回null值，不为空的话返回view中的字符串
     * <p/>
     * 输入的editText的控件
     * 为空的时候显示的相应的提示信息并返回null
     */
    public static boolean isEdtNull(TextView... edt_content) {
        String[] contents = getStringOfView(edt_content);
        for (int i = 0, len = edt_content.length; i < len; i++) {
            if (StringUtils.isBlank(contents[i])) {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断输入的EditText内容是否相等，一般用来判断密码是否相等
     * <p/>
     * 输入的editText的控件
     * 为空的时候显示的相应的提示信息并返回null
     */
    public static boolean isEdtSame(TextView... edt_content) {
        String[] contents = getStringOfView(edt_content);
        return contents[0].equals(contents[1]);
    }
}
